/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clientClasses;

import commonClasses.*;
import commonClasses.Authentication.Authentication;
import commonClasses.Messages.LoginMsg;
import commonClasses.Messages.Msg;
import commonClasses.Messages.NakMsg;
import commonClasses.commonInterfaces.ClientModelIntf;
import commonClasses.commonInterfaces.ServerIntf;
import commonClasses.commonInterfaces.ProtocolIntf;

/**
 *
 * @author Pozytywny!
 */
public class LogOnHostOrder {

    private ProtocolIntf _clientProtocol = null;
    private ClientModelIntf _model = null;

    public LogOnHostOrder(ProtocolIntf cp) {
        _clientProtocol = cp;
        _model = _clientProtocol.getClientModel();
    }

    public void go() {
        try {
            Utils.write("LogOnHostOrder: zaczynam logowanie");

            String hash = new Authentication().encode(_model.getIdentifier());

            LoginMsg loginMsg = new LoginMsg(
                    _clientProtocol,
                    hash,
                    MagicNumbers.VERSION_NUMBER);

            loginMsg.send();
            Utils.write("LogOnHostOrder: wysłałem loginMsg");
            //czekamy na odpowiedz
            long msgID;
            Utils.write("LogOnHostOrder: czekam na message..");
            msgID = Msg.receiveMsgId(_clientProtocol.getDIS());
            Utils.clientReceived(msgID);

            if (msgID == MagicNumbers.NAK_MSG_NR) {
                Utils.write("niestety logowanie zwróciło NAK!");
                NakMsg nakMsg = new NakMsg(_clientProtocol);
                nakMsg.receive();
                Utils.write("powod: " + nakMsg.getReason());

                return;
            } else
            if (msgID == MagicNumbers.LOGIN_MSG_NR) {
                Utils.write("logowanie powiodło się.");
                LoginMsg loginMsg2 = new LoginMsg(_clientProtocol);
                loginMsg2.receive();

                ServerIntf server = null;
                if (_model != null) {
                    server = _model.getServerByAddAndPort(
                            _clientProtocol.getIP(),
                            _clientProtocol.getPort());
                } else {
                    Utils.write("model == null");
                }

                if (server != null) {
                    server.setLogedIn();
                } else {
                    Utils.write("serwer nie został znaleziony");
                }

            } else {
                Utils.write("LOGON HOST dostałem dziwny message.");

            }



            // nie ważne co nam przysłał..


        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
    }
}
